/**
 * 通用调试系统使用示例
 * 支持所有JavaScript环境
 */

// ==================== 导入方式 ====================

// 方式1: 直接使用全局实例（推荐）
import Debug from '../src/DebugLogger.js'

// 方式2: 创建自定义实例
import { DebugLogger } from '../src/DebugLogger.js'

// 方式3: 兼容导入
import Print from '../src/index.js'

// ==================== 基础配置 ====================

// 配置调试系统
Debug.updateConfig({
  serverUrl: 'http://192.168.1.100:3000', // 替换为你的服务器IP
  enableRemoteLogging: true, // 启用远程日志
  enableConsoleLogging: true, // 启用控制台日志
  maxLocalLogs: 1000, // 最大本地日志数
  autoSendInterval: 0, // 立即发送（0）或批量发送（毫秒）
})

// ==================== 基础使用示例 ====================

export function basicLoggingExample() {
  console.log('=== 基础日志示例 ===')

  // 各种日志级别
  Debug.debug('这是调试信息', { userId: 123, action: 'login' })
  Debug.info('用户登录成功', { timestamp: new Date() })
  Debug.log('普通日志消息', '支持多个参数', { data: 'example' })
  Debug.warn('这是警告信息', { reason: 'deprecated API' })
  Debug.error('这是错误信息', new Error('Something went wrong'))
}

// ==================== Google DevTools风格API ====================

export function devToolsStyleExample() {
  console.log('=== DevTools风格API示例 ===')

  // 表格输出
  const users = [
    { id: 1, name: 'Alice', age: 25, city: 'New York' },
    { id: 2, name: 'Bob', age: 30, city: 'San Francisco' },
    { id: 3, name: 'Charlie', age: 35, city: 'Chicago' },
  ]
  Debug.table(users)

  // 计时操作
  Debug.time('API请求')

  // 模拟异步操作
  setTimeout(() => {
    Debug.timeLog('API请求', '中间检查点')

    setTimeout(() => {
      Debug.timeEnd('API请求')
    }, 500)
  }, 1000)

  // 分组日志
  Debug.group('用户注册流程')
  Debug.log('步骤1: 验证用户输入')
  Debug.log('步骤2: 检查用户名可用性')
  Debug.log('步骤3: 创建用户账户')

  Debug.groupCollapsed('详细数据库操作')
  Debug.log('执行SQL: INSERT INTO users...')
  Debug.log('影响行数: 1')
  Debug.groupEnd()

  Debug.log('步骤4: 发送欢迎邮件')
  Debug.groupEnd()

  // 断言
  const userAge = 25
  Debug.assert(userAge >= 18, '用户必须年满18岁', { userAge })
  Debug.assert(userAge < 0, '年龄不能为负数', { userAge }) // 这会失败

  // 计数器
  Debug.count('API调用')
  Debug.count('API调用')
  Debug.count('错误')
  Debug.countReset('API调用')
  Debug.count('API调用')

  // 调用栈追踪
  Debug.trace('用户点击了按钮')
}

// ==================== 网络请求监控示例 ====================

export async function networkMonitoringExample() {
  console.log('=== 网络请求监控示例 ===')

  // 手动记录网络请求
  const requestId = Debug.networkRequest('POST', '/api/users', {
    headers: { 'Content-Type': 'application/json' },
    data: { name: 'New User', email: 'user@example.com' },
  })

  // 模拟响应
  setTimeout(() => {
    Debug.networkResponse(requestId, {
      status: 201,
      statusText: 'Created',
      headers: { 'Content-Type': 'application/json' },
      data: { id: 123, name: 'New User', email: 'user@example.com' },
    })
  }, 800)

  // 使用fetch的示例（会自动被拦截）
  if (typeof fetch !== 'undefined') {
    try {
      const response = await fetch('https://jsonplaceholder.typicode.com/posts/1', {
        method: 'GET',
        headers: {
          'Accept': 'application/json',
        },
      })
      const data = await response.json()
      Debug.info('Fetch请求成功', { url: response.url, data })
    } catch (error) {
      Debug.error('Fetch请求失败', error)
    }
  }
}

// ==================== 高级功能示例 ====================

export function advancedFeaturesExample() {
  console.log('=== 高级功能示例 ===')

  // 对象检查
  const complexObject = {
    name: 'Complex Object',
    nested: {
      array: [1, 2, 3],
      date: new Date(),
      func: () => 'Hello',
    },
    [Symbol('key')]: 'symbol value',
  }
  Debug.dir(complexObject)

  // 内存使用情况
  Debug.memory()

  // 性能标记
  Debug.mark('operation-start')

  // 模拟一些操作
  for (let i = 0; i < 1000; i++) {
    Math.random()
  }

  Debug.mark('operation-end')
  Debug.measure('operation-duration', 'operation-start', 'operation-end')

  // 带样式的日志（仅浏览器支持）
  Debug.styled('这是彩色文字', 'color: red; font-weight: bold; font-size: 16px;')
}

// ==================== 错误处理和调试示例 ====================

export function errorHandlingExample() {
  console.log('=== 错误处理示例 ===')

  try {
    // 模拟一个错误
    throw new Error('模拟的错误')
  } catch (error) {
    Debug.error('捕获到错误:', error)
    Debug.trace('错误发生时的调用栈')
  }

  // 异步错误处理
  Promise.reject(new Error('异步错误')).catch((error) => {
    Debug.error('异步错误:', error)
  })

  // 性能监控
  Debug.time('页面加载')

  // 模拟页面加载
  setTimeout(() => {
    Debug.timeEnd('页面加载')
    Debug.info('页面加载完成')
  }, 2000)
}

// ==================== 状态监控示例 ====================

export function statusMonitoringExample() {
  console.log('=== 状态监控示例 ===')

  // 获取连接状态
  const status = Debug.getStatus()
  Debug.info('调试系统状态:', status)

  // 获取本地日志
  const logs = Debug.getLogs()
  Debug.info(`本地日志数量: ${logs.length}`)

  // 获取网络日志
  const networkLogs = Debug.getNetworkLogs()
  Debug.info(`网络请求数量: ${networkLogs.length}`)

  // 定期状态报告
  setInterval(() => {
    const currentStatus = Debug.getStatus()
    if (!currentStatus.isConnected) {
      Debug.warn('与服务器连接断开')
    }
  }, 10000)
}

// ==================== React Native特定示例 ====================

export function reactNativeExample() {
  console.log('=== React Native特定示例 ===')

  // 检测React Native环境
  if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
    Debug.info('在React Native环境中运行')

    // 设备信息
    Debug.info('设备信息', {
      platform: 'React Native',
      userAgent: navigator.userAgent,
    })
  }
}

// ==================== 浏览器特定示例 ====================

export function browserExample() {
  console.log('=== 浏览器特定示例 ===')

  if (typeof window !== 'undefined') {
    Debug.info('在浏览器环境中运行')

    // 页面信息
    Debug.info('页面信息', {
      url: window.location.href,
      userAgent: navigator.userAgent,
      viewport: {
        width: window.innerWidth,
        height: window.innerHeight,
      },
    })

    // DOM元素检查
    const bodyElement = document.body
    if (bodyElement) {
      Debug.dirxml(bodyElement)
    }
  }
}

// ==================== Node.js特定示例 ====================

export function nodeExample() {
  console.log('=== Node.js特定示例 ===')

  if (typeof process !== 'undefined' && process.versions && process.versions.node) {
    Debug.info('在Node.js环境中运行')

    // 进程信息
    Debug.info('进程信息', {
      nodeVersion: process.version,
      platform: process.platform,
      arch: process.arch,
      pid: process.pid,
    })

    // 内存使用
    const memoryUsage = process.memoryUsage()
    Debug.info('内存使用情况', memoryUsage)
  }
}

// ==================== 自定义实例示例 ====================

export function customInstanceExample() {
  console.log('=== 自定义实例示例 ===')

  // 创建专用的调试实例
  const apiLogger = new DebugLogger({
    serverUrl: 'http://192.168.1.100:3001', // 不同的服务器
    enableConsoleLogging: false, // 只发送到远程
    autoSendInterval: 5000, // 5秒批量发送
  })

  apiLogger.info('API专用日志', { api: 'user-service' })

  const performanceLogger = new DebugLogger({
    serverUrl: 'http://192.168.1.100:3002',
    enableRemoteLogging: false, // 只本地保存
    maxLocalLogs: 5000,
  })

  performanceLogger.time('性能测试')
  // ... 执行性能测试
  performanceLogger.timeEnd('性能测试')
}

// ==================== 完整使用流程示例 ====================

export async function fullWorkflowExample() {
  console.log('=== 完整工作流程示例 ===')

  Debug.group('应用启动流程')

  Debug.time('应用初始化')
  Debug.info('开始初始化应用...')

  // 模拟初始化步骤
  Debug.log('加载配置文件')
  await new Promise((resolve) => setTimeout(resolve, 300))

  Debug.log('连接数据库')
  await new Promise((resolve) => setTimeout(resolve, 500))

  Debug.log('启动服务')
  await new Promise((resolve) => setTimeout(resolve, 200))

  Debug.timeEnd('应用初始化')
  Debug.info('应用初始化完成!')

  Debug.groupEnd()

  // 清理操作
  Debug.info('5秒后清空日志...')
  setTimeout(() => {
    Debug.clear()
  }, 5000)
}

// ==================== 导出所有示例 ====================

export { basicLoggingExample, devToolsStyleExample, networkMonitoringExample, advancedFeaturesExample, errorHandlingExample, statusMonitoringExample, reactNativeExample, browserExample, nodeExample, customInstanceExample, fullWorkflowExample }

// 如果直接运行此文件，执行所有示例
if (typeof window !== 'undefined' && window.location) {
  // 浏览器环境
  window.runAllExamples = async () => {
    await basicLoggingExample()
    await devToolsStyleExample()
    await networkMonitoringExample()
    await advancedFeaturesExample()
    await errorHandlingExample()
    await statusMonitoringExample()
    await browserExample()
    await customInstanceExample()
    await fullWorkflowExample()
  }

  console.log('在浏览器控制台中运行: runAllExamples()')
}


